package main

func main() {

}

/**
左根右
根页黑
不红红
黑路同
*/

/*
*
默认插入的为红色的
如果插入的为顶点,插入后只需要把顶点改为黑色
如果插入的不是顶点,判断一下插入节点的叔叔,如果叔叔为红色,则改变父亲,叔叔,爷爷的颜色,
再看一下爷爷的颜色是不是顶点,需不需要改变;
如果插入的节点,叔叔的颜色是黑色,需要看一下被插入节点属于哪种自旋,LL,LR,RR,RL,然后(旋转点和中心点)进行变色
*/
type Color bool

const (
	Red   Color = true
	Black Color = false
)

type RBNode struct {
	Value int
	Color
	Left   *RBNode
	Right  *RBNode
	Parent *RBNode
}

type RBTree struct {
	Root *RBNode
}

func (t *RBTree) RotateLeft(x *RBNode) {
	y := x.Right
	x.Right = y.Left
	if y.Left != nil {
		y.Left.Parent = x
	}
	y.Left = x

}

func (t RBTree) RotateRight(x *RBNode) {
	y := x.Left
	x.Left = y.Right
}
